package com.lx.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;

@Service
public class RedisService {
    @Autowired
    RedisTemplate<String, Object> redisTemplate;

    // 收藏队列 key 格式: favorite:user:{userId}
    private static final String FAVORITE_PREFIX = "favorite:user:";
//    private static final String CART_PREFIX = "cart:user:";


    public void set(String key, Object value, long expireTime) {
        redisTemplate.opsForValue().set(key, value, expireTime, TimeUnit.SECONDS);
    }

    public Object get(String key) {
        return redisTemplate.opsForValue().get(key);
    }

    public boolean delete(String key) {
        return redisTemplate.delete(key);
    }

    public boolean hasKey(String key) {
        return redisTemplate.hasKey(key);
    }


    /**
     * 添加商品到收藏夹（FIFO，最多6个）
     */
    /*public boolean addToFavorite(Integer userId, Integer productId) {
        String key = FAVORITE_PREFIX + userId;
        // 使用 list 实现 FIFO，左边入，右边出
        Long size = redisTemplate.opsForList().size(key);
        if (size >= 6) {
            // 移除最老的一个（左边）
            redisTemplate.opsForList().leftPop(key);
        }
        // 添加新商品到右边
        redisTemplate.opsForList().rightPush(key, productId);
        return true;
    }*/
    /**
     * 添加商品到收藏夹（FIFO，最多6个，不允许重复）
     */
    public boolean addToFavorite(Integer userId, Integer productId) {
        String key = FAVORITE_PREFIX + userId;
        // 1. 检查是否已经收藏过该商品
        List<Object> favorites = redisTemplate.opsForList().range(key, 0, -1);
        if (favorites != null && favorites.contains(productId)) {
            return false; // 已经收藏过
        }
        // 2. 检查收藏数量
        Long size = redisTemplate.opsForList().size(key);
        if (size != null && size >= 6) {
            // 移除最老的一个（左边）
            redisTemplate.opsForList().leftPop(key);
        }
        // 3. 添加新商品到右边
        redisTemplate.opsForList().rightPush(key, productId);
        return true;
    }

    /**
     * 从收藏夹移除商品
     */
    public boolean removeFromFavorite(Integer userId, Integer productId) {
        String key = FAVORITE_PREFIX + userId;
        Long removeCount = redisTemplate.opsForList().remove(key, 0, productId);
        return removeCount > 0;
    }

    /**
     * 获取用户收藏的商品 ID 列表（从左到右，先进先出）
     */
    public List<Integer> getFavoriteList(Integer userId) {
        String key = FAVORITE_PREFIX + userId;
        List<Object> list = redisTemplate.opsForList().range(key, 0, -1);
        List<Integer> result = new ArrayList<>();
        for (Object obj : list) {
            if (obj instanceof Integer) {
                result.add((Integer) obj);
            }
        }
        return result;
    }




}